#include <iostream>
#include <cstring>
#include <queue>
using namespace std;
const int N=2e3+10;
int a[100][N][500];


int cnt,ret;
int n,m,l,t;
//int dx[6]={0,0,0,0,1,-1};
//int dy[6]={0,0,1,-1,0,0};
//int dz[6]={1,-1,0,0,0,0};
int dx[6] = {0,1,0,-1,0,0};
int dy[6] = {1,0,-1,0,0,0};
int dz[6] = {0,0,0,0,1,-1};
struct node{
	int a,b,c;
};
void bfs(int x,int y,int z)
{
	cnt++;
	a[x][y][z]=0;
	queue<node> q;
	q.push({x,y,z});
	while(q.size())
	{
		node u=q.front();
		q.pop();
		
		for(int i=0;i<6;i++)
		{
			int nx=u.a+dx[i];
			int ny=u.b+dy[i];
			int nz=u.c+dz[i];
			if(nx<1 || nx>l || ny<1 || ny>n || nz<1 || nz>m || !a[nx][ny][nz])
				continue;
			a[nx][ny][nz]=0;
			cnt++;
			q.push({nx,ny,nz});

		}
	}
}

int main()
{
	
	cin>>n>>m>>l>>t;
	for(int i=1;i<=l;i++)
		for(int j=1;j<=n;j++)
			for(int z=1;z<=m;z++)
				cin>>a[i][j][z];
	for(int i=1;i<=l;i++)
	{
		for(int j=1;j<=n;j++)
		{
			for(int z=1;z<=m;z++)
			{
				if(a[i][j][z])
				{
					cnt=0;
					bfs(i,j,z);
					if(cnt<t)
						continue;	
					ret+=cnt;
				}
			}
		}
	}
	cout<<ret<<endl;
	return 0;
}
